[INV-BACKEND-033] Создать метод MergeInventoryItems()
Реализация транзакционного метода слияния (Merge) партий в СУБД
NoteКраткая карточка задачи
- Репозиторий / Компонент:
fridge-service(Домен INVENTORY). - Контракт метода: HTTP Handler
MergeInventoryItems(). - Ссылка на Метод: Спецификация публикации фактов создания готовых блюд
- Статус: Готово к реализации
- Инструкция по шагам:
- На Шаге 7–8: Принять команду объединения от шлюза. Открыть строгую изолированную ACID-транзакцию в
PostgreSQL Fridge DBво избежание Race Condition (если пользователь параллельно пытается съесть одну из этих партий). - Выполнить математическое агрегирование: рассчитать суммарный вес всех указанных в списке записей через
SUM(weight_grams). Извлечь самую раннюю дату зачисления черезMIN(created_at). - Бизнес-правило сохранения FIFO-индекса: Удалить все старые строки из таблицы
fridge_inventory, входящие вitem_ids_list. ВыполнитьINSERTодной итоговой объединенной строки, присвоив ей суммарный вес и строго зафиксировав извлеченную на предыдущем шаге минимальную (раннюю) датуcreated_at(чтобы объединенный продукт честно остался в начале очереди на списание). - Зафиксировать транзакцию (
COMMIT) и вернуть шлюзу ответHTTP 200 OK. - На Шаге 10: Опубликовать в топик
bpds.pma.out.process.eventпакет с метаданными:event_type: "MERGE", список схлопнутых ID, итоговый вес и сквознойx_request_id.
- На Шаге 7–8: Принять команду объединения от шлюза. Открыть строгую изолированную ACID-транзакцию в